package com.example.demo.unsafe;

import java.util.function.Consumer;

/**
 * @author MarioZzz
 * @create 2023-11-21 10:49
 */
public class Test {

    /**
     * 打包后使用 view-Show ByteCode查看字节码
     *
     * Test 类编译后的 class 文件反编译后的结果如下图一所示（删除了对本文说
     * 明无意义的部分），我们可以从中看到 main 方法的指令实现、invokedynamic 指
     * 令调用的引导方法 BootstrapMethods、及静态方法 lambda$main$0（实现了
     * Lambda 表达式中字符串打印逻辑）等。在引导方法执行过程中，会通过 Unsafe.
     * defineAnonymousClass 生成如下图二所示的实现 Consumer 接口的匿名类。其
     * 中，accept 方法通过调用 Test 类中的静态方法 lambda$main$0 来实现 Lambda
     * 表达式中定义的逻辑。而后执行语句 consumer.accept（"lambda"）其实就是调用
     * 下图二所示的匿名类的 accept 方法。
     * @param args
     */
    public static void main(String[] args) {
        Consumer<String> consumer = System.out::println;
        consumer.accept("Test Unsafe Class");
    }
}
